package com.gxuwz.com_property.arrears.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gxuwz.com_property.arrears.dto.ArrearsDto;
import com.gxuwz.com_property.arrears.pojo.Arrears;
import com.gxuwz.com_property.arrears.service.ArrearsService;
import com.gxuwz.com_property.business.pojo.Business;
import com.gxuwz.com_property.business.service.BusinessService;
import com.gxuwz.com_property.common.dto.ResponseDto;
import com.gxuwz.com_property.utils.RamdomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

@RestController
public class ArrearsController {

    @Autowired
    private ArrearsService arrearsService;

    @Autowired
    private BusinessService businessService;

    @Autowired
    private Business business;


    /**
     * 随机数
     * */
    @Autowired
    private RamdomUtils ramdomUtils;

    @PostMapping("/addArrearsInfo")
    public ResponseDto addArrearsInfo(@RequestBody Arrears arrears) {

        long repair_id = ramdomUtils.generateId();
        arrears.setId(repair_id);

        /**
         * 设置时间格式
         * */
        if (arrears.getStartDate()!=null){
            // 原始日期时间值
            String originalDateTime = arrears.getStartDate();
            // 将原始日期时间转换为 LocalDateTime 对象，并调整时区（这里假设您想要转换为系统默认时区）
            LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.parse(originalDateTime), ZoneId.systemDefault());
            // 将 LocalDateTime 对象转换为符合 MySQL 的日期时间格式
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            String mysqlDateTime = dtf.format(localDateTime);
            arrears.setStartDate(mysqlDateTime);
        }

        if (arrears.getEndDate()!=null){
            // 原始日期时间值
            String originalDateTime = arrears.getEndDate();
            // 将原始日期时间转换为 LocalDateTime 对象，并调整时区（这里假设您想要转换为系统默认时区）
            LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.parse(originalDateTime), ZoneId.systemDefault());
            // 将 LocalDateTime 对象转换为符合 MySQL 的日期时间格式
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            String mysqlDateTime = dtf.format(localDateTime);
            arrears.setEndDate(mysqlDateTime);
        }
        System.out.println("arrears:"+arrears);
        Boolean aBoolean = arrearsService.addArrearsInfo(arrears);
        if (aBoolean){
            return ResponseDto.success("添加欠费记录成功");
        }else{
            return ResponseDto.error("添加欠费记录失败");
        }
    }
    @PostMapping("/updateArrearsInfo")
    public ResponseDto updateArrearsInfo(@RequestBody Arrears arrears) {

        /**
         * 设置时间格式
         * */
        if (arrears.getStartDate()!=null && arrears.getStartDate()!=""){
            // 原始日期时间值
            String originalDateTime = arrears.getStartDate();
            // 将原始日期时间转换为 LocalDateTime 对象，并调整时区（这里假设您想要转换为系统默认时区）
            LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.parse(originalDateTime), ZoneId.systemDefault());
            // 将 LocalDateTime 对象转换为符合 MySQL 的日期时间格式
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            String mysqlDateTime = dtf.format(localDateTime);
            arrears.setStartDate(mysqlDateTime);
        }

        if (arrears.getEndDate()!=null && arrears.getEndDate()!=""){
            // 原始日期时间值
            String originalDateTime = arrears.getEndDate();
            // 将原始日期时间转换为 LocalDateTime 对象，并调整时区（这里假设您想要转换为系统默认时区）
            LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.parse(originalDateTime), ZoneId.systemDefault());
            // 将 LocalDateTime 对象转换为符合 MySQL 的日期时间格式
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            String mysqlDateTime = dtf.format(localDateTime);
            arrears.setEndDate(mysqlDateTime);
        }

        Boolean aBoolean = arrearsService.updateArrearsInfo(arrears);
        System.out.println("arrears:"+arrears);
        if (aBoolean){
            return ResponseDto.success("修改欠费记录成功");
        }else{
            return ResponseDto.error("修改欠费记录失败");
        }
    }

    /**
     * 缴纳费用
     * */
    @PostMapping("/PayBusinessInfo")
    public ResponseDto PayBusinessInfo(@RequestBody Arrears arrears) {

        arrears.setStatus("已缴费");
        Boolean aBoolean = arrearsService.updateArrearsInfo(arrears);
        System.out.println("arrears:"+arrears);
        if (aBoolean){
            return ResponseDto.success("缴费成功");
        }else{
            return ResponseDto.error("缴费失败");
        }
    }

    @PostMapping("/deleteArrearsByIdInfo")
    public ResponseDto deleteArrearsByIdInfo(long id) {
        Boolean aBoolean = arrearsService.deleteArrearsByIdInfo(id);
        if (aBoolean){
            return ResponseDto.success("删除欠费记录成功");
        }else{
            return ResponseDto.error("删除欠费记录失败");
        }
    }

    @PostMapping("/findArrearsByNotice")
    public ResponseDto findArrearsByNotice(@RequestBody Arrears arrears) {
        Arrears arrearsByNotice = arrearsService.findArrearsByNotice(arrears);
        if (arrearsByNotice!=null){
            return ResponseDto.success("查询欠费记录成功",arrearsByNotice);
        }else{
            return ResponseDto.error("删除欠费记录失败");
        }

    }

    @PostMapping("/selectArrearsByPage")
    public ResponseDto selectArrearsByPage(@RequestBody ArrearsDto arrearsDto) {
        Integer pageNo = arrearsDto.getPageNo();
        Integer pageSize = arrearsDto.getPageSize();
        String flag = null;
        IPage<Arrears> arrearsIPage = arrearsService.selectArrearsByPage(new Page<>(pageNo, pageSize), arrearsDto);
        if (arrearsIPage!=null){
            /**
             * arrearsIPage.getTotal()>0 获取条数
             * */
            if (arrearsIPage.getTotal()>0){
                return ResponseDto.success("查询欠费记录成功",arrearsIPage);
            }else {
                System.out.println("arrearsIPage.getTotal():"+arrearsIPage.getTotal());
                return ResponseDto.error("没有欠费记录",arrearsIPage);
            }

        }else {
            return ResponseDto.error("查询欠费记录失败");
        }
    }



}
